js 的 eval( ) 和 JSON.parse( ) 的用法和区别:
1 eval(string):这个全局函数可以用来接受一个字符串作为javascript代码去执行,也就是说,传入的参数可以作为脚本代码进行执行;比如创建变量,创建对象,执行函数等
- 如果传入的值 是一个字符串,那么则将字符串作为代码执行,如果有返回值,则返回该值,如果没有返回值,则返回undefined
- 如果传入的值 不是一个字符串,那么则直接返回传入的值
- 需要特别注意的是对象的声明语法 { } 如果直接将{ } 声明的对象作为值传入,则直接返回该对象,如果是 ‘{ }’ 作为参数传入eval( )则会直接报错;
|
|
2 eval(string)函数的作用域:关键记住,val()函数并不会创建一个新的作用域,并且它的作用域就是它所在的作用域。这在所有主流浏览器都是如此,但是有时候需要将eval()函数的作用域设置为全局,当然可以将eval()在全局作用域中使用,但是往往实际应用中,需要在局部作用域使用具有全局作用域的此函数,这个时候可以用window.eval()的方式实现
|
|
3 eval()可以将字符串解析为对象,同样JSON.parse()也可以将字符串解析为对象
|
|
它们有什么区别和不同呢?
JSON.parse()之可以解析json格式的数据,并且会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,而eval()则可以解析任何字符串,eval是不安全的。
JSON.parse( ‘ {“name”:”Jhon”,”age”:13 } ‘ ) 解析的结果是一个对象 {“name”:”Jhon”,”age”:13 }
JSON.parse( ‘ [{“name”:”Jhon”,”age”:13 } , {“name”:”Jhon”,”age”:13 }] ‘ ) 解析的结果是一个数组,里面有两个对象
[{“name”:”Jhon”,”age”:13 } , {“name”:”Jhon”,”age”:13 }]
总结来说:JSON.parse()可以将字符串类型的数组,转化为数组,将字符串类型的对象,转化为对象
eval( )里面可以传入非字符串的数据类型,会直接返回该类型值,比如直接传递数组 [ {“name”:”jhon”} ] 或者对象 {“name”:”jhon”} ,或者基本数据类型和复杂数据类型,但是JSON.parse( ),只能接受字符串类型的 ; 如果传入数组
[ {“name”:”jhon”} ] 或者对象 {“name”:”jhon”} 会报错;
|
|